//
// Created by lz on 2021/2/24.
//

#include "CountDownLatch.h"

using namespace lzweb;

CountDownLatch::CountDownLatch(int count)
	: mutex_(),
	  condition_(mutex_),
	  count_(count)
{
}

void CountDownLatch::wait()
{
	MutexLockGuard lock(mutex_);
	while (count_ > 0)
	{
		condition_.wait();
	}
}

void CountDownLatch::countDown()
{
	MutexLockGuard lock(mutex_);
	--count_;
	if (count_ == 0)
	{
		condition_.notifyAll();
	}
}

int CountDownLatch::getCount() const
{
	MutexLockGuard lock(mutex_);
	return count_;
}


